#include "ros/ros.h"
#include "std_msgs/String.h"
#include "sstream"

int main(int argc, char **argv)
{
    setlocale(LC_ALL, "");
    //初始化ros节点
    ros::init(argc, argv, "ergouzi",ros::init_options::AnonymousName);
    /**参数：
     * 1， argc  ---封装参数个数：（n+1）；
     * 2， argv  ---封装参数数组
     * 3， name  ---为节点命名（唯一性）
     * 4， options ---节点启动选项
     * 5， 返回值为void
     * 
     * 使用：
     * 1， argc与argv的使用
     * 按照ros中特定格式传入实参，那么ros可以加以使用， 比如设置全局尺寸，给节点重命名
     * 
     * 2，options使用
     * 节点名称唯一性同一节点同时只能启动一次
     * 使用options多次启动同一个节点(节点名后加随机数
     * )
     * 
     * */
     
    ros::NodeHandle nh;
    ros::Publisher pub=nh.advertise<std_msgs::String>("fang", 10, true);
    /**
     * 4，创建发布方对象
     * 作用：创建发布对象
     * 
     * 模板：被发布消息的类型
     * 
     * 参数：
     *      1，话题名称
     *      2，队列长度
     *      3，latch（可选）， 保存发布方的最后一条消息， 建立新的连接时会发布给新的订阅者
     * 使用：
     *      lathc设置为true的作用？
     *      应用场景：以导航地图为例：1，固定频率发送地图，效率低；
     *                            2，将latch设为true则每次连接时都会发送一次地图；
     * */ 


    std_msgs::String msg;
    ros::Rate rate(10);

    int count=0;
    while(ros::ok()){
        count++;
        std::stringstream ss;
        ss<<"hello i have"<<count<<" house, when we married";
        msg.data=ss.str();
        //if(count<=10)
        pub.publish(msg);
        ROS_INFO("翠花发布的数据是 %s" , ss.str().c_str());

        if(count>=50){
            ros::shutdown();  //ros节点状态改变；
        }

        rate.sleep();
        /**
         * spin() 循环处理回调（自己循环）
         * 
         * spinOnce（） 在循环体内，处理一轮回调
         * */
        ros::spinOnce();
        ROS_INFO("一轮回调");
    }
    return 0;
}